version: 2.1

jobs:
  checkout_code:
    docker:
      - image: borisfaure/terminology-ci:latest
    environment:
      - COLUMNS: 150
      - TERM: xterm-256color
    steps:
      - run: |
          cd /terminology
          git pull --ff-only
          if [ -n "$CIRCLE_PR_NUMBER" ]; then
              git fetch origin pull/$CIRCLE_PR_NUMBER/head
          else
              if [ -n "$CIRCLE_SHA1" ]; then
                git reset --hard $CIRCLE_SHA1
              else
                git reset --hard origin/master
              fi
          fi
      - save_cache:
          key: checkout-{{ .Environment.CIRCLE_SHA1 }}
          paths:
            - /terminology
  build_and_test_debug_gcc_efl_latest:
    docker:
      - image: borisfaure/terminology-ci:latest
    environment:
      - COLUMNS: 150
      - TERM: xterm-256color
    steps:
      - restore_cache:
          key: checkout-{{ .Environment.CIRCLE_SHA1 }}
      - run:
          name: Install EFL
          command: apk add /pkg/efl-latest.apk /pkg/efl-dev-latest.apk
      - run:
          name: Compile with GCC
          environment:
            CFLAGS: -O0 -g
          command: |
            cd /terminology
            meson -Dnls=false -Dtests=true -Dfuzzing=true -Db_coverage=true -Dbuildtype=debug . build
            meson configure build
            cd build
            ninja -j4
      - run:
          name: Launch tests
          command: |
            cd /terminology
            tests/run_tests.sh -v -t build/src/bin/tytest -r tests/tests.results -d tests/
            build/src/bin/tytest dummy
            build/src/bin/tytest all
      - run:
          name: codecov
          command: |
            cd /terminology/build/
            cd src/bin
            rm -fr *@@terminology@exe *@@tyalpha@exe *@@tybg@exe *@@tycat@exe
            rm -fr *@@tyfuzz@exe *@@tyls@exe *@@typop@exe *@@tyq@exe
            rm -fr *@@tysend@exe
            cd /terminology/build/
            curl -s https://codecov.io/bash > .codecov
            chmod +x .codecov
            sed -i.bak 's/execdir/exec/' .codecov
            ./.codecov -Z
  build_and_test_release_gcc_efl_latest:
    docker:
      - image: borisfaure/terminology-ci:latest
    environment:
      - COLUMNS: 150
      - TERM: xterm-256color
    steps:
      - restore_cache:
          key: checkout-{{ .Environment.CIRCLE_SHA1 }}
      - run:
          name: Install EFL
          command: apk add /pkg/efl-latest.apk /pkg/efl-dev-latest.apk
      - run:
          name: Compile with GCC
          environment:
            CFLAGS: -O0 -g
          command: |
            cd /terminology
            meson -Dnls=false -Dtests=true -Dbuildtype=release . build
            meson configure build
            cd build
            ninja -j4
      - run:
          name: Launch tests
          command: |
            cd /terminology
            tests/run_tests.sh -v -t build/src/bin/tytest -r tests/tests.results -d tests/
            build/src/bin/tytest dummy
            build/src/bin/tytest all
  build_full_clang_efl_latest:
    docker:
      - image: borisfaure/terminology-ci:latest
    environment:
      - CC: clang
      - COLUMNS: 150
      - TERM: xterm-256color
    steps:
      - restore_cache:
          key: checkout-{{ .Environment.CIRCLE_SHA1 }}
      - run:
          name: Install EFL
          command: apk add /pkg/efl-latest.apk /pkg/efl-dev-latest.apk
      - run:
          name: Compile with Clang
          command: |
            cd /terminology
            meson -Dnls=false -Dtests=true -Dfuzzing=true . build
            meson configure build
            cd build
            ninja -j4
  build_and_test_clang_asan_efl_latest:
    docker:
      - image: borisfaure/terminology-ci:latest
    environment:
      - CC: clang
      - CFLAGS: -O0 -pipe -g -fno-omit-frame-pointer -fsanitize=address -fno-sanitize-recover=address
      - COLUMNS: 150
      - TERM: xterm-256color
    steps:
      - restore_cache:
          key: checkout-{{ .Environment.CIRCLE_SHA1 }}
      - run:
          name: Install EFL
          command: apk add /pkg/efl-latest.apk /pkg/efl-dev-latest.apk
      - run:
          name: Compile with Clang
          command: |
            cd /terminology
            meson -Dnls=false -Dtests=true . build
            meson configure build
            cd build
            ninja -j4
      - run:
          name: Launch tests
          command: |
            cd /terminology
            tests/run_tests.sh -v -t build/src/bin/tytest -r tests/tests.results -d tests/
            build/src/bin/tytest dummy
            build/src/bin/tytest all
  build_and_test_clang_msan_efl_latest:
    docker:
      - image: borisfaure/terminology-ci:latest
    environment:
      - CC: clang
      - CFLAGS: -O0 -pipe -g -fno-omit-frame-pointer -fsanitize=memory -fno-sanitize-recover=memory
      - COLUMNS: 150
      - TERM: xterm-256color
    steps:
      - restore_cache:
          key: checkout-{{ .Environment.CIRCLE_SHA1 }}
      - run:
          name: Install EFL
          command: apk add /pkg/efl-latest.apk /pkg/efl-dev-latest.apk
      - run:
          name: Compile with Clang
          command: |
            cd /terminology
            meson -Dnls=false -Dtests=true . build
            meson configure build
            cd build
            ninja -j4
      - run:
          name: Launch tests
          command: |
            cd /terminology
            build/src/bin/tytest dummy
            build/src/bin/tytest all
  build_and_test_clang_lsan_efl_latest:
    docker:
      - image: borisfaure/terminology-ci:latest
    environment:
      - CC: clang
      - CFLAGS: -O0 -pipe -g -fno-omit-frame-pointer -fsanitize=leak -fno-sanitize-recover=leak
      - COLUMNS: 150
      - TERM: xterm-256color
    steps:
      - restore_cache:
          key: checkout-{{ .Environment.CIRCLE_SHA1 }}
      - run:
          name: Install EFL
          command: apk add /pkg/efl-latest.apk /pkg/efl-dev-latest.apk
      - run:
          name: Compile with Clang
          command: |
            cd /terminology
            meson -Dnls=false -Dtests=true . build
            meson configure build
            cd build
            ninja -j4
      - run:
          name: Launch tests
          command: |
            cd /terminology
            tests/run_tests.sh -v -t build/src/bin/tytest -r tests/tests.results -d tests/
            build/src/bin/tytest dummy
            build/src/bin/tytest all
  build_and_test_clang_isan_efl_latest:
    docker:
      - image: borisfaure/terminology-ci:latest
    environment:
      - CC: clang
      - CFLAGS: -O0 -pipe -g -fno-omit-frame-pointer -fsanitize=integer -fno-sanitize-recover=integer
      - COLUMNS: 150
      - TERM: xterm-256color
    steps:
      - restore_cache:
          key: checkout-{{ .Environment.CIRCLE_SHA1 }}
      - run:
          name: Install EFL
          command: apk add /pkg/efl-latest.apk /pkg/efl-dev-latest.apk
      - run:
          name: Compile with Clang
          command: |
            cd /terminology
            meson -Dnls=false -Dtests=true . build
            meson configure build
            cd build
            ninja -j4
      - run:
          name: Launch tests
          command: |
            cd /terminology
            tests/run_tests.sh -v -t build/src/bin/tytest -r tests/tests.results -d tests/
            build/src/bin/tytest dummy
            build/src/bin/tytest all
  build_and_test_clang_ubsan_efl_latest:
    docker:
      - image: borisfaure/terminology-ci:latest
    environment:
      - CC: clang
      - CFLAGS: -O0 -pipe -g -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=undefined
      - COLUMNS: 150
      - TERM: xterm-256color
    steps:
      - restore_cache:
          key: checkout-{{ .Environment.CIRCLE_SHA1 }}
      - run:
          name: Install EFL
          command: apk add /pkg/efl-latest.apk /pkg/efl-dev-latest.apk
      - run:
          name: Compile with Clang
          command: |
            cd /terminology
            meson -Dnls=false -Dtests=true . build
            meson configure build
            cd build
            ninja -j4
      - run:
          name: Launch tests
          command: |
            cd /terminology
            tests/run_tests.sh -v -t build/src/bin/tytest -r tests/tests.results -d tests/
            build/src/bin/tytest dummy
            build/src/bin/tytest all
path: /terminology
workflows:
  version: 2
  build-and-deploy:
    jobs:
      - checkout_code
      - build_and_test_debug_gcc_efl_latest:
          requires:
            - checkout_code
      - build_and_test_release_gcc_efl_latest:
          requires:
            - checkout_code
      - build_full_clang_efl_latest:
          requires:
            - checkout_code
      - build_and_test_clang_asan_efl_latest:
          requires:
            - checkout_code
      - build_and_test_clang_msan_efl_latest:
          requires:
            - checkout_code
      - build_and_test_clang_lsan_efl_latest:
          requires:
            - checkout_code
      - build_and_test_clang_ubsan_efl_latest:
          requires:
            - checkout_code
